#!/usr/bin/env python
# -*- encoding: utf-8 -*-
'''
@NAME          : __init__.py
@TIME          : 2025/03/02 10:00:00
@AUTHOR        : chenlip
@VERSION       : 0.1.0
@DESCRIPTION   : 蓝图模块初始化
'''

import os
import importlib
from flask import Flask, Blueprint, render_template
from app.common.logutil import log, log_error, log_info

def init_all_blueprints(app: Flask):
    """
    自动发现并注册所有蓝图
    
    Args:
        app: Flask应用实例
    """

    # 路由"/"的视图函数
    siteroute = app.route

    @siteroute('/')
    def index():
        # 用户登录或未登录
        return render_template('bbs/bbsindex.html')
    

    # 获取当前目录路径
    blueprints_dir = os.path.dirname(__file__)
    
    # 遍历直接子目录
    for module_name in os.listdir(blueprints_dir):
        module_path = os.path.join(blueprints_dir, module_name)
        
        # 忽略非目录和以_或.开头的目录，排除api目录
        if not os.path.isdir(module_path) or module_name.startswith('_') or module_name.startswith('.') or module_name.startswith('api'):
            continue
        
        # 导入该模块
        module_import_path = f"app.blueprints.{module_name}"
        try:
            module = importlib.import_module(module_import_path)
            
            # 查找该模块中的所有蓝图对象
            for attr_name in dir(module):
                attr = getattr(module, attr_name)
                
                # 注册找到的蓝图
                if isinstance(attr, Blueprint):
                    app.register_blueprint(attr)

                    log_info(f"已注册蓝图: {attr.name} - {module_import_path}")
                
            # 尝试调用模块的init_blueprint函数(如果存在)
            if hasattr(module, 'init_blueprints'):
                module.init_blueprints(app)
                log_info(f"已执行模块初始化函数: {module_import_path}.init_blueprints")
                
        except Exception as e:
            log_error(f"加载蓝图模块 {module_import_path} 失败: {str(e)}")
